home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / ghostview / dialogs.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  7KB  |  216 lines

  1. /*
  2.  * dialogs.c -- Dialog box for ghostview.
  3.  * Copyright (C) 1992  Timothy O. Theisen
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  *   Author: Tim Theisen           Systems Programmer
  20.  * Internet: tim@cs.wisc.edu       Department of Computer Sciences
  21.  *     UUCP: uwvax!tim             University of Wisconsin-Madison
  22.  *    Phone: (608)262-0438         1210 West Dayton Street
  23.  *      FAX: (608)262-9777         Madison, WI   53706
  24.  */
  25.  
  26. #include <X11/Intrinsic.h>
  27. #include <X11/StringDefs.h>
  28. #include <X11/Xos.h>
  29. #include <X11/Xaw/Cardinals.h>
  30. #include <X11/Xaw/Form.h>
  31. #include <X11/Xaw/Label.h>
  32. #include <X11/Xaw/AsciiText.h>
  33. #include <X11/Xaw/Command.h>
  34. #include "gv.h"
  35.  
  36. static String okay_accelerators =
  37.     "#override\n\
  38.      <Key>Return: set() notify() unset()\n";
  39.  
  40. /* Create a dialog widget */
  41. /* It is just a form widget with
  42.  *   a label prompt
  43.  *   a text response
  44.  *   an oky button
  45.  *   a cancel button */
  46. Widget
  47. CreateDialog(parent, name, okay_callback, cancel_callback)
  48.     Widget parent;
  49.     String name;
  50.     XtCallbackProc okay_callback;
  51.     XtCallbackProc cancel_callback;
  52. {
  53.     Widget form, prompt, response, okay, cancel;
  54.     Arg args[20];
  55.     Cardinal num_args;
  56.  
  57.                             num_args = 0;
  58.     if (special_cmap) {
  59.     XtSetArg(args[num_args], XtNbackground, white);    num_args++;
  60.     }
  61.     form = XtCreateManagedWidget(name, formWidgetClass, parent, args, num_args);
  62.  
  63.                             num_args = 0;
  64.     if (special_cmap) {
  65.     XtSetArg(args[num_args], XtNforeground, black);    num_args++;
  66.     XtSetArg(args[num_args], XtNbackground, white);    num_args++;
  67.     }
  68.     XtSetArg(args[num_args], XtNtop, XtChainTop);    num_args++;
  69.     XtSetArg(args[num_args], XtNbottom, XtChainTop);    num_args++;
  70.     XtSetArg(args[num_args], XtNleft, XtChainLeft);    num_args++;
  71.     XtSetArg(args[num_args], XtNright, XtChainLeft);    num_args++;
  72.     XtSetArg(args[num_args], XtNresizable, True);    num_args++;
  73.     XtSetArg(args[num_args], XtNborderWidth, 0);    num_args++;
  74.     prompt = XtCreateManagedWidget("prompt", labelWidgetClass,
  75.                    form, args, num_args);
  76.  
  77.                             num_args = 0;
  78.     if (special_cmap) {
  79.     XtSetArg(args[num_args], XtNforeground, black);    num_args++;
  80.     XtSetArg(args[num_args], XtNbackground, white);    num_args++;
  81.     }
  82.     XtSetArg(args[num_args], XtNfromVert, prompt);    num_args++;
  83.     XtSetArg(args[num_args], XtNtop, XtChainTop);    num_args++;
  84.     XtSetArg(args[num_args], XtNbottom, XtChainTop);    num_args++;
  85.     XtSetArg(args[num_args], XtNleft, XtChainLeft);    num_args++;
  86.     XtSetArg(args[num_args], XtNright, XtChainLeft);    num_args++;
  87.     XtSetArg(args[num_args], XtNresizable, True);    num_args++;
  88.     XtSetArg(args[num_args], XtNeditType, XawtextEdit);    num_args++;
  89.     XtSetArg(args[num_args], XtNresize, XawtextResizeWidth);    num_args++;
  90.     XtSetArg(args[num_args], XtNstring, "");        num_args++;
  91.     response = XtCreateManagedWidget("response", asciiTextWidgetClass,
  92.                      form, args, num_args);
  93.  
  94.                             num_args = 0;
  95.     if (special_cmap) {
  96.     XtSetArg(args[num_args], XtNforeground, black);    num_args++;
  97.     XtSetArg(args[num_args], XtNbackground, white);    num_args++;
  98.     }
  99.     XtSetArg(args[num_args], XtNfromVert, response);    num_args++;
  100.     XtSetArg(args[num_args], XtNtop, XtChainTop);    num_args++;
  101.     XtSetArg(args[num_args], XtNbottom, XtChainTop);    num_args++;
  102.     XtSetArg(args[num_args], XtNleft, XtChainLeft);    num_args++;
  103.     XtSetArg(args[num_args], XtNright, XtChainLeft);    num_args++;
  104.     XtSetArg(args[num_args], XtNresizable, True);    num_args++;
  105.     XtSetArg(args[num_args], XtNaccelerators,
  106.          XtParseAcceleratorTable(okay_accelerators));    num_args++;
  107.     okay = XtCreateManagedWidget("okay", commandWidgetClass,
  108.                  form, args, num_args);
  109.     XtAddCallback(okay, XtNcallback, okay_callback, form);
  110.  
  111.                             num_args = 0;
  112.     if (special_cmap) {
  113.     XtSetArg(args[num_args], XtNforeground, black);    num_args++;
  114.     XtSetArg(args[num_args], XtNbackground, white);    num_args++;
  115.     }
  116.     XtSetArg(args[num_args], XtNfromVert, response);    num_args++;
  117.     XtSetArg(args[num_args], XtNfromHoriz, okay);    num_args++;
  118.     XtSetArg(args[num_args], XtNtop, XtChainTop);    num_args++;
  119.     XtSetArg(args[num_args], XtNbottom, XtChainTop);    num_args++;
  120.     XtSetArg(args[num_args], XtNleft, XtChainLeft);    num_args++;
  121.     XtSetArg(args[num_args], XtNright, XtChainLeft);    num_args++;
  122.     XtSetArg(args[num_args], XtNresizable, True);    num_args++;
  123.     cancel = XtCreateManagedWidget("cancel", commandWidgetClass,
  124.                    form, args, num_args);
  125.     XtAddCallback(cancel, XtNcallback, cancel_callback, parent);
  126.  
  127.     XtInstallAccelerators(response, okay);
  128.     XtSetKeyboardFocus(form, response);
  129.  
  130.     return form;
  131. }
  132.  
  133. /* get the prompt from the dialog box.  Used a startup time to
  134.  * save away the initial prompt */
  135. String
  136. GetDialogPrompt(w)
  137.     Widget w;
  138. {
  139.     Arg args[1];
  140.     Widget label;
  141.     String s;
  142.  
  143.     label = XtNameToWidget(w, "prompt");
  144.     XtSetArg(args[0], XtNlabel, &s);
  145.     XtGetValues(label, args, ONE);
  146.     return XtNewString(s);
  147. }
  148.  
  149. /* set the prompt.  This is used to put error information in the prompt */
  150. void
  151. SetDialogPrompt(w, newprompt)
  152.     Widget w;
  153.     String newprompt;
  154. {
  155.     Arg args[1];
  156.     Widget label;
  157.  
  158.     label = XtNameToWidget(w, "prompt");
  159.     XtSetArg(args[0], XtNlabel, newprompt);
  160.     XtSetValues(label, args, ONE);
  161. }
  162.  
  163. /* get what the user typed */
  164. String
  165. GetDialogResponse(w)
  166.     Widget w;
  167. {
  168.     Arg args[1];
  169.     Widget response;
  170.     String s;
  171.  
  172.     response = XtNameToWidget(w, "response");
  173.     XtSetArg(args[0], XtNstring, &s);
  174.     XtGetValues(response, args, ONE);
  175.     return XtNewString(s);
  176. }
  177.  
  178. /* set the default reponse */
  179. void
  180. SetDialogResponse(w, s)
  181.     Widget w;
  182.     String s;
  183. {
  184.     Arg args[3];
  185.     Widget response;
  186.     XFontStruct *font;
  187.     Dimension width, leftMargin, rightMargin;
  188.  
  189.     response = XtNameToWidget(w, "response");
  190.     XtSetArg(args[0], XtNfont, &font);
  191.     XtSetArg(args[1], XtNleftMargin, &leftMargin);
  192.     XtSetArg(args[2], XtNrightMargin, &rightMargin);
  193.     XtGetValues(response, args, THREE);
  194.     width = font->max_bounds.width * strlen(s) + leftMargin + rightMargin;
  195.  
  196.     XtSetArg(args[0], XtNstring, s);
  197.     XtSetArg(args[1], XtNwidth, width);
  198.     XtSetValues(response, args, TWO);
  199.     XawTextSetInsertionPoint(response, strlen(s));
  200.  
  201. }
  202.  
  203. /* clear the response */
  204. void
  205. ClearDialogResponse(w)
  206.     Widget w;
  207. {
  208.     Arg args[2];
  209.     Widget response;
  210.  
  211.     response = XtNameToWidget(w, "response");
  212.     XtSetArg(args[0], XtNstring, "");
  213.     XtSetArg(args[1], XtNwidth, 100);
  214.     XtSetValues(response, args, TWO);
  215. }
  216.